"""
按字符递归分割文本
这个文本分割器是推荐用于通用文本的。它通过字符列表进行参数化。它尝试按顺序在这些字符上进行分割，直到块的大小足够小。默认列表是 ['\n\n', '\n', ' ', '']。
这会尽量保持所有段落（然后是句子，再然后是单词）在一起，因为这些通常被认为是语义上最相关的文本片段。
"""
from langchain_community.document_loaders import WebBaseLoader
from langchain_text_splitters import RecursiveCharacterTextSplitter
import bs4

loader = WebBaseLoader(web_path="https://www.gov.cn/xinwen/2020-06/01/content_5516649.htm",
                       bs_kwargs=dict(parse_only=bs4.SoupStrainer(id=("UCAP-CONTENT"))))
docs = loader.load()

"""
RecursiveCharacterTextSplitter 设置的参数：
chunk_size: 每个块的最大大小，大小由 length_function 决定。
chunk_overlap: 块之间的目标重叠。重叠的块有助于减轻在块之间划分上下文时信息的丢失。
length_function: 确定块大小的函数。
is_separator_regex: 分隔符列表（默认为 ['\n\n', '\n', ' ', '']）是否应被解释为正则表达式
"""
splitter = RecursiveCharacterTextSplitter(chunk_size=1000,
                                          chunk_overlap=100,
                                          length_function=len,
                                          is_separator_regex=False)
documents = splitter.split_documents(docs)
print(len(documents))
